﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using System.Data;
using System.IO;
using System.Configuration;
using System.Transactions;
using System.Data.Linq;
using System.ComponentModel;
using UtilityExtensions;

namespace BOL.Ventas
{
    public class GetPendienteFacturacionList
    {
        int _count;


        public int Count(int idProyecto,
                         int startRowIndex,
                         int maximumRows,
                         string sortExpression)
        {
            return _count;
        }

        



        private IQueryable<PendienteFacturaInfo> ApplySelect_ListInfo()
        {
            var q = from a in DbUtil.Db.OrdenVentaItems
                    select new PendienteFacturaInfo
                    {
                        cliente=a.OrdenVenta.Cliente.descripcion,
                        idInternal = a.idInternal,
                        idProyecto=a.OrdenVenta.idProyecto,
                        localizacionStr=string.Format("{0} {1}",a.UI.UILocalizacion.descripcion,a.UI.UIBloque.descripcion),
                        localizacion = a.UI.UILocalizacion.descripcion,
                        totalStr=string.Format("{0} {1:N}",a.Moneda.simbol,a.total),
                        total=a.total,
                        UIStr=a.UI.descripcion,
                        etapa=a.UI.Etapa.descripcion,
                        fecha=a.OrdenVenta.fecha
                    };
            return q;
        }
        private IQueryable<PendienteFacturaInfo> ApplySort(IQueryable<PendienteFacturaInfo> q, string sortExpression)
        {
            switch (sortExpression)
            {
                case "UIStr":
                    q = q.OrderBy(b => b.UIStr);
                    break;
                case "UIStr DESC":
                    q = q.OrderByDescending(b => b.UIStr);
                    break;

                case "total":
                    q = q.OrderBy(b => b.total);
                    break;
                case "total DESC":
                    q = q.OrderByDescending(b => b.total);
                    break;



                case "localizacion":
                    q = q.OrderBy(b => b.localizacion);
                    break;
                case "localizacion DESC":
                    q = q.OrderByDescending(b => b.localizacion);
                    break;




                case "etapa":
                    q = q.OrderBy(b => b.etapa);
                    break;
                case "etapa DESC":
                    q = q.OrderByDescending(b => b.etapa);
                    break;


                case "cliente":
                    q = q.OrderBy(b => b.cliente);
                    break;
                case "cliente DESC":
                    q = q.OrderByDescending(b => b.cliente);
                    break;

                
                default:
                    q = q.OrderByDescending(b => b.fecha);
                    break;
            }
            return q;
        }


        [DataObjectMethod(DataObjectMethodType.Select, false)]
        public IEnumerable<PendienteFacturaInfo> Execute(int idProyecto,
                                                             int startRowIndex,
                                                             int maximumRows,
                                                             string sortExpression)
        {


            //var o = from a in DbUtil.Db.DocumentoVentaItems
            //        where
            //        a.OrdenVentaFormato.OrdenVentaItem.OrdenVenta.idProyecto == idProyecto
            //        & a.DocumentoVenta.bitAnulado == false
            //        select a.idOrdenVentaFormato;

            //var qq = from a in DbUtil.Db.OrdenVentaFormatos
            //        where !o.Contains(a.idInternal)
            //        & a.or
            //        & a.total > 0
            //        & a.totalFin == 0
            //        & a.idOrdenVentaItem ==
            //        select a;

            var q = ApplySelect_ListInfo();


            q = q.Where(a => a.idProyecto == idProyecto);


            _count = q.Count();

            q = ApplySort(q, sortExpression);
            return q.Skip(startRowIndex).Take(maximumRows);
        }



                        

    }
}
